package cn.edu.csust.coursecard.dao;

import cn.edu.csust.coursecard.dao.entity.Comment;
import cn.edu.csust.coursecard.dao.entity.Reply;
import cn.edu.csust.coursecard.dao.dto.CommentInfo;
import cn.edu.csust.coursecard.dao.dto.Message;
import cn.edu.csust.coursecard.dao.dto.ReplyInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface CommentMapper {
    
    /**
     * 添加评论数据
     */
    int insertComment(Comment comment);
    
    Comment selectCommentById(Integer commentId);

    int updateComment(Comment comment);
    
    /**
     * 添加回复数据
     */
    int insertReply(Reply reply);
    
    /**
     * 查询评论信息
     */
    List<CommentInfo> selectCommentInfo(Integer postId);
    
    
    /**
     * 查询回复信息
     */
    List<ReplyInfo> selectReplyInfo(Integer commentId);
    
    /**
     * 从帖子中获取未读的消息
     */
    List<Message> selectMessageFromPost(@Param("userId") Integer userId,@Param("isRead") Boolean isRead);
    
    /**
     * 从评论中获取未读的消息
     */
    List<Message> selectMessageFromComment(@Param("userId") Integer userId,@Param("isRead") Boolean isRead);
    
    /**
     *从帖子中获取未读的消息
     */
    List<Message> selectMessageFromReply(@Param("userId") Integer userId,@Param("isRead") Boolean isRead);
    
//    /**
//     * 将评论设置为已读
//     */
//    int setCommentToRead(@Param("commentIds") List<Integer> commentIds);
//
//    /**
//     * 将回复设置为已读
//     */
//    int setReplyToRead(@Param("replyIds") List<Integer> replyIds);
    
    /**
     * 查询帖子中的评论id
     */
    List<Integer> selectCommentIdsByPostId(Integer postId);
    
    /**
     * 删除评论
     */
    int deleteCommentByIds(@Param("commentIds") List<Integer> commentIds);
    
    /**
     * 查询评论中回复的id
     */
    List<Integer> selectReplyByCommentIds(@Param("commentIds") List<Integer> commentIds);
    
    /**
     * 删除回复
     */
    int deleteReplyByIds(@Param("replyIds") List<Integer> replyIds);
    
    /**
     * 通过id获取回复信息
     */
    Reply selectReplyById(Integer replyId);
    
    int setMessageToRead(Message message);
    
    /**
     * 将帖子的消息设置为已读，即：将帖子底下的评论设置为已读
     * @param userId
     */
    void setPostMessageToRead(Integer userId);
    
    void setCommentMessageToRead(Integer userId);
    
    void setReplyMessageToRead(Integer userId);
}